package com.guocheng.modules.login.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.guocheng.base.BaseController;
import com.guocheng.entity.AjaxResult;
import com.guocheng.modules.login.model.dto.MenuDTO;
import com.guocheng.modules.login.model.po.Menu;
import com.guocheng.modules.login.service.MenuService;
import com.guocheng.modules.login.utils.MenuUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

@Controller
@RequestMapping("/sys/menu")
public class MenuController extends BaseController {

    @Autowired
    private MenuService menuService;

    /**
     * 返回菜单页面
     *
     * @return
     */
    @GetMapping("/index")
    public String index() {
        return "sys/menu/list";
    }

    /**
     * 根据当前登录用户id查询用户的菜单列表
     *
     * @return
     */
    @GetMapping("/query")
    @ResponseBody
    public AjaxResult quertMenu() {
        List<MenuDTO> menu1 = menuService.selectMenuByUserId(user.getId());
        //格式化数据，前端需要
        List<MenuDTO> menus = MenuUtils.menuToChildByParent(menu1);
        return AjaxResult.ok().put("menuInfo", menus);
    }

    /**
     * 查询菜单列表
     */
    @GetMapping("/list")
    @ResponseBody
    public AjaxResult viewMenuList() {
        List<Menu> menus = menuService.selectList(new QueryWrapper<Menu>().orderByAsc("sort"));
        return AjaxResult.ok().data(menus);
    }

    /**
     * 打开选择父菜单的页面
     * @return
     */
    @GetMapping("/parent/show")
    public String parentShow(){
        return "sys/menu/parent";
    }

    /**
     * 获取父菜单的数据
     * @return
     */
    @GetMapping("/parent/list")
    @ResponseBody
    public AjaxResult parentList(){
        List<Menu> menus = menuService.selectList(new Menu().setType(1));
        return AjaxResult.ok().data(menus);
    }

    /**
     * 打开添加页面
     * @return
     */
    @GetMapping("/save")
    public String create() {
        return "sys/menu/show";
    }

    /**
     * 添加提交
     * @param menu
     * @return
     */
    @PostMapping("/save")
    @ResponseBody
    public AjaxResult save(Menu menu) {
        menu.setCreateDate(new Date());
        //如果父类为空，则赋值0
        if (menu.getParentId()==null) menu.setParentId(0);
        //TODO 排序另外计算
        if (menu.getSort() == null) {
            int i = menuService.countByEntity(new Menu().setParentId(menu.getParentId()));
            menu.setSort(i + 1);
        }
        boolean b = menuService.insert(menu);
        if(b)return AjaxResult.ok();
        return AjaxResult.error();
    }

    /**
     * 返回修改页面
     */
    @GetMapping("/edit")
    public String updateMenu(@RequestParam("id") Integer id, Model model) {
        if (id == null || id.equals(0)) {
            model.addAttribute("error", "没有id");
        } else {
            Menu menu = menuService.selectById(id);
            Menu menu1 = menuService.selectById(menu.getParentId());    //获取父名称
            if(menu1!=null) menu.setParentName(menu1.getTitle());
            model.addAttribute("menu", menu);
        }
        return "sys/menu/show";
    }

    /**
     * 修改菜单提交
     */
    @PutMapping("/edit")
    @ResponseBody
    public AjaxResult updateMenu(Menu menu) {
        if (menu.getId() == 0 || menu.getId() == null) {
            return AjaxResult.error().put("msg", "请输入id");
        }
        boolean b = menuService.updateById(menu);
        if (b) return AjaxResult.ok().put("msg", "修改成功");
        return AjaxResult.error().put("msg", "修改失败");
    }

    /**
     * 删除一个菜单
     *
     * @param id
     * @return
     */
    @RequestMapping("/delete")
    @ResponseBody
    public AjaxResult delete(@RequestParam("id") Integer id) {
        boolean b = menuService.deleteById(id);
        if (b) return AjaxResult.ok();
        return AjaxResult.error();
    }
}
